}
int year = 0, mon = 0, mday = 0, hour = 0, min = 0, sec = 0;
- QDateTime dt;
+ gpsbabel::DateTime dt;
int res = sscanf(timestr, "%d-%d-%dT%d:%d:%d", &year, &mon, &mday, &hour,
&min, &sec);
if (res > 0) {
// Any offsets that were stuck at the end.
dt = dt.addSecs(-off_sign * off_hr * 3600 - off_sign * off_min * 60);
- } else {
- dt = QDateTime();
}
return dt;
}
void
GpxFormat::gpx_end(QStringView /*unused*/)
{
- static QDateTime gc_log_date;
+ static gpsbabel::DateTime gc_log_date;
// Remove leading, trailing whitespace.
cdatastr = cdatastr.trimmed();
(!wpt_tmp->gc_data->last_found.isValid())) {
wpt_tmp->AllocGCData()->last_found = gc_log_date;
}
- gc_log_date = QDateTime();
+ gc_log_date = gpsbabel::DateTime();
break;
case tt_cache_favorite_points:
wpt_tmp->AllocGCData()->favorite_points = cdatastr.toInt();
*/
+#include "interpolate.h"
+
#include <climits> // for INT_MAX
#include <cmath> // for abs, ceil, isfinite, round
#include <cstdlib> // for abs, strtod
#include <optional> // for optional
#include <QString> // for QString
-#include <QtGlobal> // for qAsConst, QAddConst<>::Type
+#include <QtGlobal> // for qint64, qAsConst, qRound64
#include "defs.h"
-#include "interpolate.h"
+#include "formspec.h" // for FormatSpecificDataList
#include "grtcirc.h" // for linepart, RAD, gcdist, radtomiles
#include "src/core/datetime.h" // for DateTime
#include "src/core/logging.h" // for Fatal
} else {
std::optional<qint64> timespan;
if (wpt->creation_time.isValid() && time1.isValid()) {
- timespan = wpt->creation_time.toMSecsSinceEpoch() -
- time1.toMSecsSinceEpoch();
+ timespan = time1.msecsTo(wpt->creation_time);
}
std::optional<double> altspan;
if (altitude1 != unknown_alt && wpt->altitude != unknown_alt) {
wpt_new->shortname = QString();
wpt_new->description = QString();
if (timespan.has_value()) {
- wpt_new->SetCreationTime(0, time1.toMSecsSinceEpoch() +
- round(frac * *timespan));
+ wpt_new->SetCreationTime(time1.addMSecs(qRound64(frac * *timespan)));
} else {
wpt_new->creation_time = gpsbabel::DateTime();
}
lat1 = wpt->latitude;
lon1 = wpt->longitude;
altitude1 = wpt->altitude;
- time1 = wpt->creation_time;
+ time1 = wpt->creation_time.toUTC(); // use utc to avoid tz conversions.
}
}
backuproute.flush();
#ifndef INTERPOLATE_H_INCLUDED_
#define INTERPOLATE_H_INCLUDED_
-#include <optional> // for optional
-
+#include <QString> // for QString
#include <QVector> // for QVector
-#include <QtGlobal> // for qint64
#include "defs.h" // for ARG_NOMINMAX, arglist_t, ARGTYPE_BEGIN_EXCL, ARG...
#include "filter.h" // for Filter
{
char u = 's';
waypt_init_bounds(&kml_bounds);
- kml_time_min = QDateTime();
- kml_time_max = QDateTime();
+ kml_time_min = gpsbabel::DateTime();
+ kml_time_max = gpsbabel::DateTime();
if (opt_units) {
u = tolower(opt_units[0]);
*/
-#include <cmath> // for fabs
-#include <cstdlib> // for strtod
+#include "position.h"
+
+#include <cmath> // for abs
+#include <cstdlib> // for strtod
-#include <QList> // for QList
-#include <QtGlobal> // for qAsConst, QAddConst<>::Type
+#include <QList> // for QList
+#include <QtGlobal> // for qAsConst, qRound64, qint64
#include "defs.h"
-#include "grtcirc.h" // for RAD, gcdist, radtometers
-#include "position.h"
+#include "grtcirc.h" // for RAD, gcdist, radtometers
+#include "src/core/datetime.h" // for DateTime
#if FILTERS_ENABLED
if (dist <= pos_dist) {
if (check_time) {
- double diff_time = fabs(waypt_time(qlist.at(i).wpt) - waypt_time(qlist.at(j).wpt));
+ qint64 diff_time = std::abs(qlist.at(j).wpt->creation_time.msecsTo(qlist.at(i).wpt->creation_time));
if (diff_time >= max_diff_time) {
continue;
}
void PositionFilter::init()
{
- char* fm;
pos_dist = 0.0;
- max_diff_time = 0.0;
+ max_diff_time = 0;
check_time = false;
if (distopt != nullptr) {
+ char* fm;
pos_dist = strtod(distopt, &fm);
if (!((*fm == 'm') || (*fm == 'M'))) {
if (timeopt != nullptr) {
check_time = true;
- max_diff_time = strtod(timeopt, &fm);
+ max_diff_time = qRound64(strtod(timeopt, nullptr) * 1000.0);
}
}
#ifndef POSITION_H_INCLUDED_
#define POSITION_H_INCLUDED_
-#include <QVector> // for QVector
+#include <QString> // for QString
+#include <QVector> // for QVector
+#include <QtGlobal> // for qint64
#include "defs.h" // for route_head (ptr only), ARG_NOMINMAX, ARGTYPE_FLOAT
#include "filter.h" // for Filter
route_head* cur_rte = nullptr;
double pos_dist{};
- double max_diff_time{};
+ qint64 max_diff_time{};
char* distopt = nullptr;
char* timeopt = nullptr;
char* purge_duplicates = nullptr;